// Copyright 2009 the Sputnik authors.  All rights reserved.
// This code is governed by the BSD license found in the LICENSE file.

/*---
info: |
    Identifier must be label in the label set of an enclosing (but not
    crossing function boundaries) IterationStatement
es5id: 12.8_A5_T1
description: Checking if breaking another labeled loop fails
negative:
  phase: parse
  type: SyntaxError
---*/

function Test() {
    $DONOTEVALUATE();

    (function(){
        LABEL_OUT : var x=0, y=0;
        LABEL_DO_LOOP : do {
            LABEL_IN : x++;
            if(x===10)
                return;
            break LABEL_ANOTHER_LOOP;
            LABEL_IN_2 : y++;
            function IN_DO_FUNC(){}
        } while(0);

        LABEL_ANOTHER_LOOP : do {
            ;
        } while(0);

        function OUT_FUNC(){}
    })();
}

// preheat
const NUMBER_OF_PREHEAT = 1;
for (let i = 0; i < NUMBER_OF_PREHEAT; i++) {
    Test();
}

ArkTools.jitCompileAsync(Test);
assert.sameValue(ArkTools.waitJitCompileFinish(Test), true, '[JIT] JIT disabled.');

// test
const NUMBER_OF_TEST = 1; // or 2
for (let i = 0; i < NUMBER_OF_PREHEAT; i++) {
    Test();
}
